package com.ruoyi.sl.mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.ruoyi.sl.domain.SlRwork;
import com.ruoyi.sl.domain.SlRworkRmember;
import com.ruoyi.sl.domain.SlWsProduction;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * 报工单Mapper接口
 * 
 * @author admin
 * @date 2024-06-06
 */
public interface SlRworkMapper 
{

    //根据日期取年模块产量
    public List<SlWsProduction> selectProductionByYear(List<Integer> year);

    //根据日期取模块车间产量
    public List<SlWsProduction> selectProductionByModuleId(@Param("strYear") int year,@Param("moduleId") Long moduleId);

    //根据日期取模块车间工序产量
    public List<SlWsProduction> selectProductionByWorkshopId(@Param("strYear") int year,@Param("moduleId") Long moduleId,@Param("workshopId") Long workshopId);

    //获报工单ID和参与人获取参与人的所有报工项
    public List<SlRwork> selectSlRworkListByRfworkIdAndMember(@Param("rfworkId") Long rfworkId,@Param("memberUser") String memberUser);

    //查询当前报工单下每道工序的生产量
    public List<SlRwork> selectGroupProcessByRfworkId(Long rfworkId);


    //最后一次报工部分数据
    public SlRwork selectSlRworkByLast(@Param("rworkUser") String rworkUser,@Param("rworkDate") Date rworkDate);


    //根据模块，车间，大工序ID 查询包含这些ID的所有报工单ID
    public List<Long> selectGroupRworkByAnyId(SlRwork slRwork);

    //报工人选过的操作人按次数排序
    public List<String> selectOftenUserList(String rworkUser);


    /**
     * 查询报工单
     * 
     * @param rworkId 报工单主键
     * @return 报工单
     */
    public SlRwork selectSlRworkByRworkId(Long rworkId);

    /**
     * 查询报工单列表
     * 
     * @param slRwork 报工单
     * @return 报工单集合
     */
    public List<SlRwork> selectSlRworkList(SlRwork slRwork);

    /**
     * 根据日期查询当日的报工人列表
     *
     * @param rworkDate 日期
     * @return 报工人集合
     */
    public List<SlRwork> selectSlRworkUserListByDate(Date rworkDate);


    /**
     * 查询指定报工单条件的总金额
     *
     * @param slRwork 报工单条件
     * @return 金额
     */
    public BigDecimal selectTotalAmountByRwork(SlRwork slRwork);

    /**
     * 查询指定报工单下所有报工项的总金额
     *
     * @param rfworkId 报工单ID
     * @return 金额
     */
    public BigDecimal selectAllPayByRfworkId(Long rfworkId);


    /**
     * 所有已通过审核的报工单
     *
     * @return 集合
     */
    public List<SlRwork> selectAllApprovedSlRworkList();


    /**
     * 所有未提交的报工项
     *
     * @return 集合
     */
    public List<SlRwork> selectSlRworkListByNoSubmit(SlRwork slRwork);

    /**
     * 根据报工单ID查询所有报工项
     *
     * @return 集合
     */
    public List<SlRwork> selectSlRworkListByRfworkId(Long rfworkId);


    /**
     * 新增报工单
     * 
     * @param slRwork 报工单
     * @return 结果
     */
    public int insertSlRwork(SlRwork slRwork);

    /**
     * 修改报工单
     * 
     * @param slRwork 报工单
     * @return 结果
     */
    public int updateSlRwork(SlRwork slRwork);

    /**
     * 报工单状态改为2领导审核通过
     *
     * @param slRwork 报工单
     * @return 结果
     */
    public int updateSlRworkApprovedLeader(SlRwork slRwork);


    /**
     * 删除报工单
     * 
     * @param rworkId 报工单主键
     * @return 结果
     */
    public int deleteSlRworkByRworkId(Long rworkId);

    /**
     * 批量删除报工单
     * 
     * @param rworkIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSlRworkByRworkIds(Long[] rworkIds);

    /**
     * 批量删除操作人
     *
     * @param rworkIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSlRworkRmemberByRworkIds(Long[] rworkIds);

    /**
     * 批量新增操作人
     *
     * @param slRworkRmemberList 操作人列表
     * @return 结果
     */
    public int batchSlRworkRmember(List<SlRworkRmember> slRworkRmemberList);


    /**
     * 通过报工单主键删除操作人信息
     *
     * @param rworkId 报工单ID
     * @return 结果
     */
    public int deleteSlRworkRmemberByRworkId(Long rworkId);

    /**
     * 将报工单的审核标记改为3，已计算工资
     *
     * @param rworkId 报工单ID
     * @return 结果
     */
    public int updateSlRworkToOver(Long rworkId);


}
